package com.example.hrsystem.data.repository;

import android.app.Application;
import android.content.Context;

import androidx.lifecycle.LiveData;

import com.example.hrsystem.data.model.TaskItem;
import com.example.hrsystem.data.source.AppDatabase;
import com.example.hrsystem.data.source.TaskDao;

import java.util.List;

/**
 * 任务仓库类
 * 处理待办/待阅事项相关的数据业务逻辑
 */
public class TaskRepository {

    private TaskDao taskDao;
    private LiveData<List<TaskItem>> allTasks;

    /**
     * 构造方法
     */
    public TaskRepository(Application application) {
        // 获取ApplicationContext以避免内存泄漏
        Context context = application.getApplicationContext();
        AppDatabase database = AppDatabase.getDatabase(context);
        taskDao = database.taskDao();
        allTasks = taskDao.getAllTasks();
    }

    /**
     * 获取所有任务
     */
    public LiveData<List<TaskItem>> getAllTasks() {
        return allTasks;
    }

    /**
     * 根据任务类型获取任务
     */
    public LiveData<List<TaskItem>> getTasksByType(String taskType) {
        return taskDao.getTasksByType(taskType);
    }

    /**
     * 根据任务状态获取任务
     */
    public LiveData<List<TaskItem>> getTasksByStatus(String status) {
        return taskDao.getTasksByStatus(status);
    }

    /**
     * 根据优先级获取任务
     */
    public LiveData<List<TaskItem>> getTasksByPriority(String priority) {
        return taskDao.getTasksByPriority(priority);
    }

    /**
     * 根据接收者ID获取任务
     */
    public LiveData<List<TaskItem>> getTasksByAssigneeId(String assigneeId) {
        return taskDao.getTasksByAssigneeId(assigneeId);
    }

    /**
     * 根据创建者ID获取任务
     */
    public LiveData<List<TaskItem>> getTasksByCreatorId(String creatorId) {
        return taskDao.getTasksByCreatorId(creatorId);
    }

    /**
     * 根据ID获取任务详情
     */
    public LiveData<TaskItem> getTaskById(int taskId) {
        return taskDao.getTaskById(taskId);
    }

    /**
     * 获取待办事项总数
     */
    public LiveData<Integer> getTodoTaskCount(String assigneeId) {
        return taskDao.getTodoTaskCount(assigneeId);
    }

    /**
     * 获取待阅事项总数
     */
    public LiveData<Integer> getReadTaskCount(String assigneeId) {
        return taskDao.getReadTaskCount(assigneeId);
    }

    /**
     * 获取已办事项总数
     */
    public LiveData<Integer> getDoneTaskCount(String assigneeId) {
        return taskDao.getDoneTaskCount(assigneeId);
    }

    /**
     * 获取已阅事项总数
     */
    public LiveData<Integer> getReadDoneTaskCount(String assigneeId) {
        return taskDao.getReadDoneTaskCount(assigneeId);
    }

    /**
     * 插入任务
     */
    public void insert(TaskItem task) {
        // 简单实现，后续可以添加异步处理
        if (task != null && taskDao != null) {
            taskDao.insert(task);
        }
    }

    /**
     * 更新任务
     */
    public void update(TaskItem task) {
        // 简单实现，后续可以添加异步处理
        if (task != null && taskDao != null) {
            taskDao.update(task);
        }
    }

    /**
     * 删除任务
     */
    public void delete(TaskItem task) {
        // 简单实现，后续可以添加异步处理
        if (task != null && taskDao != null) {
            taskDao.delete(task);
        }
    }

    /**
     * 同步获取任务详情
     */
    public TaskItem getTaskByIdSync(int taskId) {
        // 简单实现，直接调用DAO的同步方法
        if (taskDao != null) {
            return taskDao.getTaskByIdSync(taskId);
        }
        return null;
    }
}